'''
    最使用最小二乘法解简单的线性回归（一元）
    使用excel生成一个简单的数据集
'''

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics

# 读取数据
data=pd.read_csv('1-1.csv')
#print(data.head())
x=np.array(data[['x']])
y=np.array(data[['y']])

# 使用sklearn划分数据集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=10,random_state=1)
#print(len(x_train))
#print(len(x_test))

# 调用线性模型
linreg=LinearRegression()
linreg.fit(x_train,y_train)
print(linreg.intercept_)
print(linreg.coef_)

# 模型评价 （计算均方误差MSE和均方根误差RMSE）
y_pred=linreg.predict(x_test)
print("MSE:",metrics.mean_squared_error(y_test,y_pred))
print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))

# 画图
plt.scatter(x,y,s=50,c='red',alpha=0.5)
res_f=lambda x:linreg.coef_[0]*x+linreg.intercept_
x_plot=np.linspace(0,100,2)
y_plot=res_f(x_plot)
plt.title("Simple Linear Regression")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x_plot,y_plot,linewidth=3)
plt.show()

